// 工具函数：判断路径是否是图片
export function isImagePath(path) {
  // 常见图片扩展名列表
  const imageExtensions = ['jpg', 'jpeg', 'png', 'gif', 'webp', 'svg', 'bmp']

  // 提取扩展名（处理带参数的路径，如 image.jpg?width=200）
  const cleanPath = path.split('?')[0] // 移除查询参数
  const extension = cleanPath.split('.').pop().toLowerCase()

  return imageExtensions.includes(extension)
}

// 工具函数：抛出图片路径
export function getImageUrl(name) {
  return new URL(`/src/components/icons/${name}`, import.meta.url).href
}

/**
 * 工具函数：将字节数转换为最合适的单位（优先MB，其次KB）
 * @param {number} bytes - 字节数（必须为非负整数）
 * @param {number} [decimalPlaces=2] - 保留的小数位数，默认2位
 * @returns {string} 格式化后的结果（如 "1.50 KB" 或 "2.34 MB"）
 */
export function convertBytes(bytes, decimalPlaces = 2) {
  // 验证输入
  if (typeof bytes !== 'number' || bytes < 0 || !Number.isInteger(bytes)) {
    throw new Error('输入必须是非负整数的字节数')
  }

  const KB = 1024
  const MB = KB * 1024

  // 优先转换为MB
  if (bytes >= MB) {
    const value = bytes / MB
    return `${value.toFixed(decimalPlaces)} MB`
  }
  // 其次转换为KB
  else if (bytes >= KB) {
    const value = bytes / KB
    return `${value.toFixed(decimalPlaces)} KB`
  }
  // 小于1KB时仍以字节显示
  else {
    return `${bytes} B`
  }
}

// 工具函数：显示文件后缀
export function getFileSuffix(specificType) {
  console.log('specificType', specificType);
  if (!specificType || typeof specificType !== 'string') {
    return {
      category: 'unknown',
      subcategory: specificType.split('/')[1] || '',
      original: specificType,
      matched: false,
    }
  }

  // 标准化处理：转为小写，移除特殊字符
  const normalized = specificType
    .toLowerCase()
    .replace(/[^\w\/\.\-]/g, ' ')
    .trim()

  // 合并规则：自定义规则优先
  const rules = [
    // 演示类 - 包含powerpoint、ppt关键字即匹配
    {
      keywords: ['powerpoint', 'ppt', 'pptx', 'presentation'],
      category: 'document',
      // subcategory: 'powerpoint',
      subcategory: 'ppt',
    },
    // 表格类 - 包含excel、xls关键字即匹配
    {
      keywords: ['excel', 'xls', 'xlsx', 'spreadsheet'],
      category: 'document',
      // subcategory: 'excel',
      subcategory: 'excel',
    },
    // 文档类 - 包含word、doc关键字即匹配
    {
      keywords: ['word', 'doc', 'docx', 'wordprocessing'],
      category: 'document',
      // subcategory: 'word',
      subcategory: 'doc',
    },
    // PDF类 - 包含pdf关键字即匹配
    {
      keywords: ['pdf'],
      category: 'document',
      subcategory: 'pdf',
    },
    // txt类
    {
      keywords: ['txt', 'text', 'plain'],
      category: 'text',
      subcategory: 'txt',
    },
    // // 图像类 - 包含image或图片扩展名即匹配
    // {
    //   keywords: ['image', 'jpg', 'jpeg', 'png', 'gif', 'webp', 'bmp'],
    //   category: 'image',
    //   subcategory: getSubtype(normalized),
    // },
    // // 视频类 - 包含video或视频扩展名即匹配
    // {
    //   keywords: ['video', 'mp4', 'avi', 'mov', 'mkv', 'flv'],
    //   category: 'video',
    //   subcategory: getSubtype(normalized),
    // },
  ]

  // 遍历规则，查找是否包含任何关键字（部分匹配）
  for (const rule of rules) {
    const hasMatch = rule.keywords.some((keyword) => {
      // 部分匹配：只要包含关键字即可
      return normalized.includes(keyword)
    })

    if (hasMatch) {
      return {
        category: rule.category,
        subcategory:
          typeof rule.subcategory === 'function'
            ? rule.subcategory(normalized)
            : rule.subcategory,
        original: specificType,
        matched: true,
      }
    }
  }

  // 未找到匹配
  return {
    category: 'unknown',
    subcategory: specificType.split('/')[1] || '',
    original: specificType,
    matched: false,
  }

  // 辅助函数：提取子类型
  function getSubtype(type) {
    const extensions = [
      'jpg',
      'jpeg',
      'png',
      'gif',
      'webp',
      'bmp',
      'mp4',
      'avi',
      'mov',
      'mkv',
      'flv',
      'pdf',
      'doc',
      'docx',
      'ppt',
      'pptx',
      'xls',
      'xlsx',
    ]

    for (const ext of extensions) {
      if (type.includes(ext)) {
        return ext
      }
    }
    return 'unknown'
  }
}
